<?php

namespace App\Http\Controllers;

use App\User;
use Illuminate\Http\Request;
use Notification;
use App\Notifications\ForgetPassword as f;

class ForgetPassword extends Controller
{
    /**
     *
     * 加载输入修改密码的邮箱地址方法
     *
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function writeEmail()
    {
        //加载输入邮箱地址模板
        return view('forgetPassword.writeEmail');
    }


    /**
     *
     * 发邮件方法
     *
     * @param Request $request
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function sendEmail(Request $request)
    {
        //获取post数据中的email
        $post = $request->all();
        //不能获取填写的邮箱地址就发送,应该判断该邮箱是否是我当前网站中的已注册账号,
        //找到用户表中email等于post数据中的email的数据值
        $user = User::where('email', $post['email'])->first();
        if ($user) {
            //如果能找到用户数据,才发送邮件
            //参数解析:
            //第一个参数是通知消息发送给的用户数据对象,该数据对象中一定要有email字段
            //第二个参数是发送的消息通知类
            Notification::send($user, new f($user['email']));
            //如果发送成功,设置发送成功的闪存信息,并加载一个页面
            session()->flash('success', '邮件已发送至您的邮箱,请进入邮箱进行修改密码操作!');

            return view('forgetPassword.sendOk');
        }
    }

    /**
     *
     * 加载修改密码模板
     *
     * @param $email
     * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
     */
    public function changePassword($email)
    {
        return view('forgetPassword.password', compact('email'));
    }

    /**
     *
     * 处理修改密码
     *
     * @param Request $request
     * @return \Illuminate\Http\RedirectResponse
     */
    public function change(Request $request)
    {
        $post = $request->all();
        $validator = $request->validate(
            [
                'password' => 'required|between:6,20|confirmed',
                'password_confirmation' => 'required|between:6,20',
            ]
        );
        //只有通过验证,才能进行下面的修改密码操作
        //通过获取的邮箱地址找到对应数据
        $user = User::where('email', $post['email'])->first();
        $user->password = bcrypt($post['password']);
        $user->save();
        //设置闪存信息并返回
        session()->flash('success','密码修改成功,请登录!!');
        return redirect()->route('login');
    }
}
